/**
 * File:   modbus_prop.h
 * Author: AWTK Develop Team
 * Brief:  modbus_prop
 *
 * Copyright (c) 2023 - 2024  Guangzhou ZHIYUAN Electronics Co.,Ltd.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * License file for more details.
 *
 */

/**
 * History:
 * ================================================================
 * 2024-3-11 Li XianJing <xianjimli@hotmail.com> created
 *
 */

#ifndef TK_MODBUS_PROP_H
#define TK_MODBUS_PROP_H

#include "tkc.h"

BEGIN_C_DECLS

/**
 * @class modbus_prop_t
 * @annotation ["fake"]
 * 属性。
 * 
*/
typedef struct _modbus_prop_t {
  /**
   * @property {value_type_t} type
   * @annotation ["readable"]
   * 类型。
   */  
  value_type_t type;
  /**
   * @property {value_type_t} channel_type
   * @annotation ["readable"]
   * 通道类型。
   */
  value_type_t channel_type;
  /**
   * @property {uint16_t} offset
   * @annotation ["readable"]
   * 偏移。
   */
  uint16_t offset;
  /**
   * @property {uint16_t} index
   * @annotation ["readable"]
   * 索引。
   */
  uint16_t index;
  /**
   * @property {int16_t} bit_offset
   * @annotation ["readable"]
   * 位偏移。
   */
  int16_t bit_offset;
  /**
   * @property {char*} channel_name
   * @annotation ["readable"]
   * 通道名。
   */
  char channel_name[TK_NAME_LEN + 1];
  /**
   * @property {uint8_t*} buffer
   * @annotation ["readable"]
   * 缓冲区。
   */
  uint8_t* buffer;
  /**
   * @property {uint32_t} buffer_length
   * @annotation ["readable"]
   * 缓冲区长度。
   */
  uint32_t buffer_length;
  /**
   * @property {uint32_t} type_size
   * @annotation ["readable"]
   * 类型大小。
   */
  uint32_t type_size;
  
  /**
   * @property {uint32_t} limit 
   * @annotation ["readable"]
   * 二进制数据和字符串的长度限制。
   */
  uint32_t limit;
} modbus_prop_t;

/**
 * @method modbus_prop_create
 * 创建属性名。
 * @param {tk_object_t*} variables 对象。
 * @param {const char*} name 属性名。
 * 
 * @return {modbus_prop_t*} 返回属性名信息。
*/
modbus_prop_t* modbus_prop_create(tk_object_t* variables, const char* name);

/**
 * @method modbus_prop_parse
 * 解析属性名。
 * @param {modbus_prop_t*} prop 属性名信息。
 * @param {tk_object_t*} variables 对象。
 * @param {const char*} name 属性名。
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */ 
ret_t modbus_prop_parse(modbus_prop_t* prop, tk_object_t* variables, const char* name);

/**
 * @method modbus_prop_get_value
 * 获取属性值。
 * @param {modbus_prop_t*} prop 属性名信息。
 * @param {value_t*} v 值。
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t modbus_prop_get_value(modbus_prop_t* prop, value_t* v);

/**
 * @method modbus_prop_set_value
 * 设置属性值。
 * @param {modbus_prop_t*} prop 属性名信息。
 * @param {const value_t*} v 值。
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t modbus_prop_set_value(modbus_prop_t* prop, const value_t* v);

/**
 * @method modbus_prop_destroy
 * 销毁属性名。
 * @param {modbus_prop_t*} prop 属性名信息。
 * @return {ret_t} 返回RET_OK表示成功，否则表示失败。
 */
ret_t modbus_prop_destroy(modbus_prop_t* prop);

END_C_DECLS

#endif /*TK_MODBUS_PROP_H*/

